home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Freeware 2002 November
/
SGI Freeware 2002 November - Disc 3.iso
/
dist
/
fw_qt3.idb
/
usr
/
freeware
/
Qt
/
examples
/
demo
/
i18n
/
i18n.cpp.z
/
i18n.cpp
Wrap
C/C++ Source or Header
|
2002-04-08
|
5KB
|
252 lines
#include "i18n.h"
#include "wrapper.h"
#include "../textdrawing/textedit.h"
#include <qaction.h>
#include <qvbox.h>
#include <qworkspace.h>
#include <qpopupmenu.h>
#include <qmenubar.h>
#include <qtoolbar.h>
#include <qtoolbutton.h>
#include <qpixmap.h>
#include <qiconset.h>
#include <qapplication.h>
#include <qwidgetlist.h>
#include <qlabel.h>
#include <qtextedit.h>
static int windowIdNumber = 5000;
static bool firstShow = TRUE;
I18nDemo::I18nDemo(QWidget *parent, const char *name)
: QMainWindow(parent, name), lastwrapper(0)
{
initActions();
initMenuBar();
QVBox *box = new QVBox(this);
box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
box->setMargin( 1 );
box->setLineWidth( 1 );
workspace = new QWorkspace(box);
connect(workspace, SIGNAL(windowActivated(QWidget *)),
SLOT(windowActivated(QWidget *)));
workspace->setBackgroundMode(PaletteMid);
setCentralWidget(box);
}
I18nDemo::~I18nDemo()
{
}
void I18nDemo::initActions()
{
actionClose = new QAction(tr("Close the current window."),
tr("Close"),
CTRL + Key_F4,
this);
connect(actionClose, SIGNAL(activated()), SLOT(closeSlot()));
actionCloseAll = new QAction(tr("Close all opened windows."),
tr("Close All"),
0,
this);
connect(actionCloseAll, SIGNAL(activated()), SLOT(closeAllSlot()));
actionTile = new QAction(tr("Tile opened windows."),
tr("Tile"),
0,
this);
connect(actionTile, SIGNAL(activated()), SLOT(tileSlot()));
actionCascade = new QAction(tr("Cascade opened windows."),
tr("Cascade"),
0,
this);
connect(actionCascade, SIGNAL(activated()), SLOT(cascadeSlot()));
}
void I18nDemo::initMenuBar()
{
newMenu = new QPopupMenu(this);
connect(newMenu, SIGNAL(activated(int)), SLOT(newSlot(int)));
newMenu->insertItem("&English", 0);
newMenu->insertItem("&Japanese", 1);
newMenu->insertItem("&Korean", 2);
newMenu->insertItem("&Norwegian", 3);
windowMenu = new QPopupMenu(this);
connect(windowMenu, SIGNAL(activated(int)), SLOT(windowSlot(int)));
windowMenu->setCheckable(TRUE);
actionClose->addTo(windowMenu);
actionCloseAll->addTo(windowMenu);
windowMenu->insertSeparator();
actionTile->addTo(windowMenu);
actionCascade->addTo(windowMenu);
windowMenu->insertSeparator();
menuBar()->insertItem("&New", newMenu);
menuBar()->insertItem("&Window", windowMenu);
}
void I18nDemo::newSlot(int id)
{
QString qmfile;
switch (id) {
default:
case 0: qmfile = "i18n/en.qm"; break;
case 1: qmfile = "i18n/ja.qm"; break;
case 2: qmfile = "i18n/ko.qm"; break;
case 3: qmfile = "i18n/no.qm"; break;
}
if (lastwrapper) {
qApp->removeTranslator(&lastwrapper->translator);
lastwrapper = 0;
}
Wrapper *wrapper = new Wrapper(workspace, windowIdNumber);
wrapper->translator.load(qmfile, ".");
qApp->installTranslator(&wrapper->translator);
connect(wrapper, SIGNAL(destroyed()), SLOT(wrapperDead()));
wrapper->setCaption(tr("--language--"));
TextEdit *te = new TextEdit(wrapper);
te->setMinimumSize(500, 400);
te->fileNew();
te->currentEditor()->
setText(tr("<h3>About Qt</h3>"
"<p>This program uses Qt version %1, a multiplatform C++ "
"GUI toolkit from Trolltech. Qt provides single-source "
"portability across Windows 95/98/NT/2000, Linux, Solaris, "
"HP-UX and many other versions of Unix with X11.</p>"
"<p>See <tt>http://www.trolltech.com/qt/</tt> for more "
"information.</p>").arg(QT_VERSION_STR));
qApp->removeTranslator(&wrapper->translator);
te->show();
wrapper->show();
windowMenu->insertItem(wrapper->caption(), wrapper->id);
windowMenu->setItemChecked(wrapper->id, TRUE);
lastwrapper = wrapper;
windowIdNumber++;
}
void I18nDemo::windowSlot(int id)
{
if (id < 5000)
return;
QWidgetList list = workspace->windowList();
Wrapper *wrapper = (Wrapper *) list.first();
while (wrapper) {
if (wrapper->id == id) {
wrapper->setFocus();
break;
}
wrapper = (Wrapper *) list.next();
}
}
void I18nDemo::windowActivated(QWidget *w)
{
if (lastwrapper) {
qApp->removeTranslator(&lastwrapper->translator);
windowMenu->setItemChecked(lastwrapper->id, FALSE);
}
if (! w) {
lastwrapper = 0;
return;
}
Wrapper *wrapper = (Wrapper *) w;
if (isVisible())
qApp->installTranslator(&wrapper->translator);
windowMenu->setItemChecked(wrapper->id, TRUE);
lastwrapper = wrapper;
}
void I18nDemo::closeSlot()
{
QWidget *w = workspace->activeWindow();
delete w;
}
void I18nDemo::closeAllSlot()
{
QWidget *w;
while ((w = workspace->activeWindow()))
w->close(TRUE);
}
void I18nDemo::tileSlot()
{
workspace->tile();
}
void I18nDemo::cascadeSlot()
{
workspace->cascade();
}
void I18nDemo::wrapperDead()
{
Wrapper *w = (Wrapper *) sender();
if (w == lastwrapper)
qApp->removeTranslator(&w->translator);
windowMenu->removeItem(w->id);
}
void I18nDemo::showEvent(QShowEvent *)
{
if (firstShow) {
newSlot(1);
firstShow = FALSE;
return;
}
if (! lastwrapper)
return;
qApp->installTranslator(&lastwrapper->translator);
}
void I18nDemo::hideEvent(QHideEvent *)
{
if (! lastwrapper)
return;
qApp->removeTranslator(&lastwrapper->translator);
}